// 在Vuex中对token进行管理
// 1提前在utils/auth文件中定义好直接引入
import { getToken, setToken, removeToken } from '@/utils/auth'
import { login, getUserProfile, getUserDetailById } from '@/api/user'// 导入接口
import { resetRouter } from '@/router'
const state = {
  token: getToken(), // 1.1设置初始状态
  userInfo: {}// 2获取用户信息初始状态
}
const mutations = { // 1.2 更新token数据
  setToken(state, paylod) {
    state.token = paylod
    setToken(paylod)// 同步更新到本地缓存
  },
  removeToken(state) { // 1.3 退出登录的时候 应该清除vuex中的token 同步清除本地缓存的token
    state.token = null
    removeToken() // 删除本地缓存token
  },
  setUserInfo(state, payload) { // 2.1 更新设置用户信息
    state.userInfo = payload
  },
  removeUserInfo(state) { // 2.2删除用户信息
    state.userInfo = {}
  }
}
const actions = { // 1.4处理结果
// 先封装一个登录函数
  async login(context, data) {
    const result = await login(data)
    // 如果为true表示登录成功 取返回的token
    context.commit('setToken', result)
  },
  // 封装一个获取用户资料的action
  async   getUserInfo({ commit }) { // 2.3处理结果
    const result = await getUserProfile()
    const detailResult = await getUserDetailById(result.userId) // 获取用户信息中的头像
    // console.log(detailResult)
    commit('setUserInfo', { ...result, ...detailResult })// 提交mutations(用户信息和头像合并到一起)
    return result
  },
  // 封装一个退出登录的action
  logout({ commit }) {
    commit('removeToken')// 删除token
    commit('removeUserInfo')// 删除用户资料
    resetRouter() // 重置路由
    // 重置Vuex的路由数据
    commit('permission/setRoutes', [], { root: true })// 表示root:true commit实际是用顶级调用方式
  }
}
export default {
  namespaced: true,
  state,
  mutations,
  actions

}
